perm filename TIMER.FAI[D,SYS] blob sn#266347 filedate 1977-03-03 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	TITLE FOO
C00007 ENDMK
C⊗;
TITLE FOO

A←1
B←2
C←3
D←4
E←5
T←6
TT←7
TTT←10
P←17

APR←←0
PI←←4
KLPAG←←10
CCA←←14
TIM←←20
MTR←←24
DTE0←←200
SWEEPB←←200000				;KL10 APR CONI BIT - SWEEP BUSY

UPTEBX←←504

LOC 74
	JRST DDT↑

LOC 201
	JRST DDT↑

KLEPT←←1000
DONG11←←20000				;DTE CONO BIT.  REQUEST 11 INTERRUPT
DTFLG←←444				;DTE20 OPERATION COMPLETE FLAG
DTF11←←450				;      FROM 11 ARGUMENT
DTCMD←←451				;      TO 11 COMMAND
INTVEC←←514

LOC 5000
KLUPT:
KLPFW←←500		;PAGE FAIL WORD
KLPFPC←←501		;PAGE FAIL PC
KLPFNP←←502		;PAGE FAIL NEW PC WORD

LOC 6000
USPGT:	170040,,400

LOC 7000
EXPGT:
FOR I←0,777,1 <
	170040,,I
>

LOC 10000

GO:	CONO APR,200000
	CONO PI,12300		;TURN ON PI 1
	CONSZ APR,SWEEPB	;WAIT FOR SWEEP BUSY TO FALL
	JRST .-1
	CONSO KLPAG,600000	;IS THE CACHE ON ALREADY?
	JRST DSKDM0		;NO.
	BLKO CCA,		;VALIDATE CORE
	CONSZ APR,SWEEPB
	JRST .-1
DSKDM0:	CONO KLPAG,0		;TURN OFF CACHE.  EPT TO PAGE ZERO.  TURN OFF MAP
	DATAI CCA,0		;SWEEP CACHE.  INVALIDATE ALL.
	CONSZ APR,SWEEPB	;WAIT FOR SWEEP BUSY TO FALL
	JRST .-1
	MOVE P,[-20,,PDL-1]
	MOVE A,[JSR INTINT]
	MOVEM A,KLEPT+INTVEC
	CONO KLPAG,KLEPT⊗-9	;PUT EPT AT KLEPT
	SETZM KLUPT
	MOVE A,[KLUPT,,KLUPT+1]
	BLT A,KLUPT+777
	MOVE A,[4000,,PFLT]
	MOVEM A,KLUPT+KLPFNP
	DATAI KLPAG,A
	ANDCMI A,17777
	IORI A,KLUPT⊗-9
	DATAO KLPAG,A
	BLKI KLPAG,[	EXPGT⊗-9	;SET EXPGT AND USPGT POINTERS IN AC BLOCK 6
			USPGT⊗-9	]
	CONO KLPAG,660000+KLEPT⊗-9	;FLUSH OLD PAGE MAP CACHE ENTRIES
	MOVE A,[JRST 100]
	MOVEM A,400100
	CONO MTR,410001		;GIVE TIMER PIA OF 1, ENB ACCT IN USER MODE
	DATAI KLPAG,A
	TRZ A,400000
	DATAO KLPAG,A
	SETZM KLUPT+UPTEBX	;CLEAR EBOX COUNTER
	SETZM COUNT

	CONO TIM,460000+=1000	;CLEAR AND START UP COUNTER, SET PERIOD TO =1000
	JRST 2,@[10000,,100]	;GO TO USER MODE JRST .


INTINT:	0			;INTERVAL TIMER INTERRUPT JSRS HERE
	AOS A,COUNT
	DATAI MTR,B		;GET EBOX COUNTER
	DMOVEM B,ECOUNT
	LSH C,1
	LSHC B,3-=12
	LSH C,-1		;X 8
	DIV B,[=1000000]	;/ 1000000 GIVES 10MS COUNT
	IMULI B,=10000
	IDIV B,COUNT		;GET % * =10000 IN B
	MOVEM B,PERCNT
	TRNE A,777
	JRST INTIN1
	MOVE T,PERCNT
	IDIVI T,=100
	PUSH P,TT
	PUSHJ P,DECOUT
	MOVEI C,"."
	PUSHJ P,TYO
	POP P,T			;GET REMAINDER BACK
	MOVEI C,"0"
	CAIGE T,=10
	PUSHJ P,TYO
	PUSHJ P,DECOUT
	MOVEI B,[ASCIZ /%
/]
	PUSHJ P,TYPE
INTIN1:	CONO TIM,460000+=1000	;RESTART COUNTER
	JRST 12,@INTINT


DECOUT:	IDIVI T,=10
	JUMPE T,DECOU1
	HRLM TT,(P)
	PUSHJ P,DECOUT
	HLRZ TT,(P)
DECOU1:	MOVEI C,"0"(TT)
	JRST TYO

TYPE:	HRLI B,440700
TYPE1:	ILDB C,B
	JUMPE C,CPOPJ
	PUSHJ P,TYO
	JRST TYPE1

TYO:	PUSH P,C
	CAIN C,33
	MOVEI C,"$"
	ANDI C,177
	PUSHJ P,DTEXX
	POP P,C
	POPJ P,

CPOPJ1:	AOS (P)
CPOPJ:	POPJ P,


DTEXX:	MOVEM C,KLEPT+DTCMD
	SETZM KLEPT+DTFLG		;CLEAR 11'S RESPONSE FLAG
	CONO DTE0,DONG11		;RING FOR 11
	SKIPN KLEPT+DTFLG		;WAIT FOR RESPONSE
	JRST .-1
	MOVE C,KLEPT+DTF11		;GET 11'S RESPONSE WORD
	POPJ P,

COUNT:	0
ECOUNT:	BLOCK 2
PERCNT:	0

PFLT:	JRST 4,.

PDL:	BLOCK 20

	END GO